def cache_a(func):
    cache = {}
    def wrapper(n):
        if n in cache:
            return cache[n]
        result = func(n)
        cache[n] = result
        return result
    return wrapper

@cache_a
def fab(n):
  if n==1:
    return 1
  if n==0:
    return 0
  else:
    result=int(fab(n-1))+int(fab(n-2))
    return result

for i in range(18):
    print(fab(i))


#迭代器
#一个未知长度的数据流，通过next来获取下一个元素
#生成器
#一个特殊的迭代器，提供了惰性延迟的功能